As background for our invention consider previous publications in the similar area. IBM Technical Disclosure Bulletin Vol. 34, No. 11, April 1992, pp. 269-271 "Return Address Stack Cache" by Barrera et al describes a stack for saving subroutine return addresses. The NSIA is saved in the LIFO stack mechanism as the Call instruction completes. The prediction for a Return target address is predicted from the top address in the stack. The stack is not adjusted until the Return completes. If there is a Call in progress (after branch prediction and before the prediction is verified and updated) a Return prediction must wait for the Call to finish. Similarly if a Return is in progress, another Return prediction must wait. As computer processors become faster by executing more instructions at a time, this waiting is significant. This mechanism is described for a computer instruction set with explicit Call and Return instructions.
IBM Technical Disclosure Bulletin Vol. 30, No. 11, April 1988, pp. 221-225 "Subroutine Call/Return Stack" by Webb describes a pair of stacks for saving subroutine addresses. This mechanism uses a branch history table with an extra bit in each entry to identify Return instructions. A Return is identified when the branch prediction is verified for the Return. If the stack prediction was correct, a potential return instruction must have functioned as a Return. Consequently, the first time a particular potential Return is encountered, it is not handled as a Return. On subsequent executions of the instruction, the Branch History Table identifies the instruction as a Return and it is predicted using the stack. This mechanism requires two stacks, which are each used in associative searches to find the prediction of a Return and to identify Returns.
IBM Technical Disclosure Bulletin Vol. 24, No. 7A, December 1981, pp. 3255-3258 "Subroutine Return Address Stack" by Losq describes a stack for saving return addresses and the register identifier in which the address is saved on a Call and branched to in a Return. This filters out some cases of potential Calls and Returns that do not implement the Call and Return functions. Therefore the stack is used to predict a Return only if the register identifier at the top of the stack matches the register identifier in the instruction. This mechanism does not handle a Return prediction if another Call or Return is in progress.